import store from '@/store';

export default {
  inserted(el, binding, vnode) {
    const { value, arg } = binding;
    // 获取store中路由权限对象
    const accessObj = store.getters && store.getters.access;
    let hasPermission;
    // value是指令输入的url字符串
    if (typeof value === 'string') {
      // 检查字符串是否有查看权限
      hasPermission = arg && accessObj[arg] && accessObj[arg].includes(value);
      // 如果没有权限，移除元素
      if (!hasPermission) {
        el.parentNode && el.parentNode.removeChild(el);
      }
    } else if (typeof value === 'boolean') {
      // 如果没有权限，移除元素
      hasPermission = value;
      if (!value) {
        el.parentNode && el.parentNode.removeChild(el);
      }
    } else if (Array.isArray(value) && value.length !== 0) {
      if (binding.modifiers.parent) {
        // 对于v-permission.parent表示父级容器，只要其中有一个为有权限true，就不移除节点
        hasPermission = value.some(item => {
          if (typeof item === 'boolean') {
            return item === true;
          } else {
            return arg && accessObj[arg].includes(item);
          }
        });
      } else {
        // 普通按钮而已，只有所以的为true，移除节点
        hasPermission = value.every(item => {
          if (typeof item === 'boolean') {
            return item === true;
          } else {
            return arg && accessObj[arg].includes(item);
          }
        });
      }
      // 如果没有权限，移除元素
      if (!hasPermission) {
        el.parentNode && el.parentNode.removeChild(el);
      }
    } else {
      throw new Error(`current value ${value}`);
    }
  }
};
